import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class demo3 {
    //字符流：Reader（）
    public static void main(String[] args) throws IOException {
        Reader reader=new FileReader("e:/蠢阿伟/test.txt");

        /*// 1.
        // 一次读取一个字符，返回值为 int 类型，返回值要么是 char(转化为相应的unicode编码值) 要么是-1（查完了）
        while(true){
            int a=reader.read();
            if(a == -1){
                break;
            }
            char ch=(char) a;
            System.out.println(ch);
        }*/

/*        // 2.
        // 每次尽量读取最大的长度，将 ch 填满
        char[] ch=new char[3];
        while(true){
            int a=reader.read(ch);
            if(a == -1){
                break;
            }
            for(int i=0;i<a;i++){
                System.out.print(ch[i]);
            }
            System.out.println();
        }

        // 每次打开文件要记得释放，原因： 当我们打开文件不释放，就会一直在文件描述符表中申请内存
        // 当文件描述符表满了之后，就会出问题
        reader.close();*/
        // 仅仅这样关闭 存在些许bug ，当我们 线程意外结束之后，可能没来得及实现close
        //所以，我们应该采取下述方法：
        try{
            char[] ch=new char[3];
            while(true){
                int a=reader.read(ch);
                if(a == -1){
                    break;
                }
                for(int i=0;i<a;i++){
                    System.out.print(ch[i]);
                }
                System.out.println();
            }
        }finally {
            reader.close();
        }
        // 但是这样做不美观
        // 我们就可以采用 try() 方法，将对象发在括号中
        try(Reader reader2=new FileReader("e:/蠢阿伟/test.txt");){
            char[] ch=new char[3];
            while(true){
                int a=reader2.read(ch);
                if(a == -1){
                    break;
                }
                for(int i=0;i<a;i++){
                    System.out.print(ch[i]);
                }
                System.out.println();
            }
        }finally {
            reader.close();
        }








        /*//3.  存在问题
        // 每次尽量读最大长度，从 offset 开始放，放 len个
        char[] ch=new char[10];
        while(true){
            int a=reader.read(ch,2,8);
            if(a == -1){
                break;
            }
            for(int i=0;i<10;i++){
                System.out.print(ch[i]);
            }
            System.out.println();
        }*/
    }
}
